﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Xml;
using System.Xml.Linq;
using EnvDTE;
using Microsoft.VisualStudio.Shell;
using SandcastleUtils.Items;

namespace SandcastleUtils.UI
{
    public partial class addGuiToAmlFile : Form
    {
        private SVsServiceProvider serviceProvider;
        public String result = "";

        private String PathToFoldeProject = "";

        public addGuiToAmlFile(SVsServiceProvider _serviceProvider)
        {
            InitializeComponent();
            this.serviceProvider = _serviceProvider;
            //_result = result;
        }


        public addGuiToAmlFile()
        {
            InitializeComponent();
            //listView1.SmallImageList = imageList1;
            //listView1.View = System.Windows.Forms.View.Details;



            //for (int i = 0; i < imageList1.Images.Count; i++)
            //    listView1.Items.Add("").ImageIndex = i;
        }


        private bool isMediaContentFile(String path)
        {
            try
            {
                System.Xml.XmlDocument doc = new XmlDocument();
                doc.Load(path);
                if (doc.DocumentElement.Name.Equals("stockSharedContentDefinitions"))
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            catch (Exception ex)
            {
                return false;
            }



        }
        private IList<MediaContentItem> getImageFromMediaContentFile(String pathToMediaContentFile)
        {
            IList<MediaContentItem> mediaContentItems = new List<MediaContentItem>();

            //читаем данные из файла
            XDocument doc = XDocument.Load(pathToMediaContentFile);

            foreach (XElement el in doc.Root.Elements())
            {
                //Получаем guid картинки
                Guid guidImages = Guid.Parse(el.Attribute("id").Value);
                XElement elImage = el.Element("image");

                //Получаем путь к картинке
                String pathToImages = elImage.Attribute("file").Value;


               pathToImages  = pathToImages.Replace("..", PathToFoldeProject);

                XElement elAltText = elImage.Element("altText");
                String altText = "";
                if (elAltText != null)
                {
                    altText = elAltText.Value;
                }

                MediaContentItem contentItem = new MediaContentItem();

                contentItem.AltTextImages = altText;
                contentItem.GuidImages = guidImages;
                contentItem.PathImages = pathToImages;

                mediaContentItems.Add(contentItem);
            }



            return mediaContentItems;
        }

        private bool CreateItemsListView(IList<MediaContentItem> listitem)
        {
            try
            {
                ImageList imageList = new ImageList();
                imageList.ImageSize = new Size(100,100);
                listView1.LargeImageList = imageList;
                int count = 0;

                foreach (MediaContentItem mediaContentItem in listitem)
                {
                    imageList.Images.Add(mediaContentItem.GuidImages.ToString(), new Bitmap(mediaContentItem.PathImages));



                    ListViewItem listViewItem = new ListViewItem();
                    listViewItem.Text = mediaContentItem.AltTextImages;
                    listViewItem.ImageIndex = count;
                    listViewItem.Tag = mediaContentItem;


                    listView1.Items.Add(listViewItem);

                    count++;
                }
                return true;
            }
            catch(Exception ex)
            {
                MessageBox.Show(ex.Message);
                return false;
            }

        }



        private void getImageFromProject()
        {
            if (this.serviceProvider != null)
            {
                DTE vs = this.serviceProvider.GetService(typeof (DTE)) as DTE;
                if (vs != null && vs.ActiveDocument != null)
                {

                    Project project = vs.Solution.Projects.Item(1);
                    Property pathtoProject = project.Properties.Item("FullPath");


                    PathToFoldeProject = pathtoProject.Value.ToString();

                    foreach (ProjectItem projectItem in project.ProjectItems)
                    {
                        String name = projectItem.Name;
                        if (name.EndsWith(".xml"))
                        {
                            //Получаем из свойства путь к файлу
                            Property pathToFile = projectItem.Properties.Item("FullPath");
                            //Проверяем является  ли файл, файлом медиа контента
                            String PathToMediaContentFile = pathToFile.Value.ToString();
                            if (isMediaContentFile(PathToMediaContentFile))
                            {
                                //Получаем MediaContentItem
                               IList<MediaContentItem> listitem =  getImageFromMediaContentFile(PathToMediaContentFile);

                               //Созадем items в ListView  из listitem
                                CreateItemsListView(listitem);
                               
                            }

                        }
                    }
                }
            }



            //ProjectItem projectItem = vs.ActiveDocument.ProjectItem.ProjectItems.AddFromFile(filename);
                    //if (projectItem != null)
                    //{
                    //    Property buildActionProperty = projectItem.Properties.Item("BuildAction");
                    //    if (buildActionProperty != null)
                    //    {
                    //        buildActionProperty.Value = 0;
                    //    }
                    //}
            

            ////Получаем текущий проект
            //EnvDTE.DTE dte = (EnvDTE.DTE)Package.GetGlobalService(typeof(EnvDTE.DTE));
            //EnvDTE.Project project = dte.Solution.Projects.Item(1);

            ////В Проекте ищем файл c расширением .content          
            //foreach (ProjectItem var in project.ProjectItems)
            //{
            //    string name = var.Name;

            //    if (name.EndsWith(".content"))
            //    {

            //        SandcastleFileNode node = (SandcastleFileNode)((OAVSProjectItem)var.Object).FileNode;

            //        pathtoLayotFile = node.Url;
            //        // Загружаем XML
            //        LoadXMl();
            //    }
            





        }



        private void addGuiToAmlFile_Load(object sender, EventArgs e)
        {
            getImageFromProject();

  
        }

        private void button1_Click(object sender, EventArgs e)
        {
           if (listView1.SelectedItems.Count == -1)
           {
               MessageBox.Show("Выберите изображение. Либо добавте новое");
           }
           else
           {
               ListViewItem item = listView1.SelectedItems[0];
               MediaContentItem contentItem = (MediaContentItem) item.Tag;

               result = "\"" + contentItem.GuidImages.ToString() + "\"";
               this.Close();

           }
        }
    }
}
